/* eslint-disable yield-star-spacing */
/* eslint-disable generator-star-spacing */
/* eslint-disable no-unused-vars */
/**
 * 生成一个数字范围的生成器。
 * @generator
 * @yields {number} 范围中的下一个数字。
 * @param {number[]} args - 定义范围的参数。
 */
export function* range(...args) {
  const l = args.length;
  if (l === 1) {
    yield* rangeHandler(0, args[0], 1);
  } else if (l === 2) {
    yield* rangeHandler(args[0], args[1], 1);
  } else if (l === 3) {
    yield* rangeHandler(args[0], args[1], args[2]);
  } else {
    yield* rangeHandler(0, 10, 1);
  }
}

/**
 * 处理在指定范围内生成数字。
 * @generator
 * @yields {number} 范围中的下一个数字。
 * @param {number} start - 范围的起始数字。
 * @param {number} end - 范围的结束数字。
 * @param {number} step - 增加范围的步长值。
 */
function* rangeHandler(start, end, step) {
  for (let i = start; i < end; i += step) {
    yield i;
  }
}
